home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / C Internet Config / IC Application Source ƒ / 68k Internet Config ƒ / C Source ƒ / IC Popup Whats.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-02  |  6.3 KB  |  299 lines  |  [TEXT/SPM ]

  1. /*
  2.     IC Popup Whats.c
  3.     
  4. */
  5.  
  6. #include <Dialogs.h>
  7.  
  8. #include "IC Window Globals.h"
  9. #include "IC Popup Whats.h"
  10.  
  11. #include "IC Types.h"
  12. #include "IC StrH.h"
  13. #include "IC Dialogs.h"
  14. #include "IC Misc Subs.h"
  15. #include "IC Subs.h"
  16. #include "IC API.h"
  17. #include "IC Document.h"
  18. #include "IC Movable Modal.h"
  19.  
  20. void InternalSetItem(MenuHandle mh,short item_num,StringPtr text){
  21.     Delete(text,TPPos("\p:",text),255);
  22.     SetMenuItemText(mh,item_num,text);
  23. }
  24.  
  25. void SafeAppendMenu(MenuHandle mh,StringPtr text){
  26.     AppendMenu(mh,"\pFred");
  27.     InternalSetItem(mh,CountMItems(mh),text);
  28. }
  29.  
  30. void SafeInsertMenuItem(MenuHandle mh,short after,StringPtr text){
  31.     InsertMenuItem(mh,"\pFred",after);
  32.     InternalSetItem(mh,after,text);
  33. }
  34.  
  35. void AdjustPopupMenu(DialogPtr dlg,short item){
  36.     ControlHandle control;
  37.     MenuHandle menuh;
  38.     Handle servers;
  39.     Str255 server,str;
  40.     short servers_count,menu_count,i,found;
  41.     Boolean longmenu;
  42.     
  43.     control=GetDControlHandle(dlg,item);
  44.     menuh=GetPopupMHandle(dlg,item);
  45.     servers=(Handle)(*control)->contrlRfCon;
  46.     menu_count=CountMItems(menuh);
  47.     servers_count=CountStrsH(servers);
  48.     
  49.     if (menu_count==0){
  50.         for (i=2;i<servers_count;i++){
  51.             GetIndStrH(servers,i,server);
  52.             SafeAppendMenu(menuh,server);
  53.         }
  54.         AppendMenu(menuh,"\p(-");
  55.         
  56.         GetAString(server,128,2);
  57.         AppendMenu(menuh,server);
  58.         menu_count=CountMItems(menuh);
  59.     }
  60.     
  61.     found=-1;
  62.     
  63.     GetIndStrH(servers,1,server);
  64.     
  65.     for (i=2;i<servers_count;i++){
  66.         GetIndStrH(servers,i,str);
  67.         if (IUEqualString(server, str)==0){
  68.             found=i;
  69.             break;
  70.         }
  71.     }
  72.     
  73.     longmenu=menu_count==(servers_count+3);
  74.     
  75.     if (found>0){
  76.         if (longmenu){
  77.             DeleteMenuItem(menuh,1);
  78.             DeleteMenuItem(menuh,1);
  79.             SetDCtlValue(dlg,item,GetDCtlValue(dlg,item)-2);
  80.         }
  81.         SetControlMaximum(GetDControlHandle(dlg,item),CountMItems(menuh));
  82.         SetDCtlValue(dlg,item,found-1);
  83.     } else {
  84.         if (!longmenu){
  85.             InsertMenuItem(menuh,"\p(-;Fred",0);
  86.             SetDCtlValue(dlg,item,GetDCtlValue(dlg,item)+2);
  87.         }
  88.         GetIndStrH(servers,1,str);
  89.         InternalSetItem(menuh,1,str);
  90.         SetControlMaximum(GetDControlHandle(dlg,item),CountMItems(menuh));
  91.         SetDCtlValue(dlg,item,1);
  92.     }
  93.     EnableItem(menuh,GetDCtlValue(dlg,item));
  94. }
  95.  
  96. Boolean UsingName(Handle servers,StringPtr name){
  97.     Str255 tmpstr;
  98.     short i;
  99.     
  100.     for (i=2;i<CountStrsH(servers);i++){
  101.         GetIndStrH(servers,i,tmpstr);
  102.         Delete(tmpstr,TPPos("\p:",tmpstr),255);
  103.         if (IUEqualString(tmpstr,name)==0)
  104.             return true;
  105.     }
  106.     
  107.     return false;
  108. }
  109.  
  110. Handle ask_filter_globals;
  111.  
  112. pascal Boolean AskServerFilter(DialogPtr dlog,EventRecord* event,short* item){
  113.     Boolean dim_ok;
  114.     Str255 name_string,host_string;
  115.     
  116.     GetItemText(dlog,4,name_string);
  117.     GetItemText(dlog,5,host_string);
  118.     
  119.     dim_ok=(name_string[0]==0)||(host_string[0]==0)||(UsingName(ask_filter_globals,name_string));
  120.     SetDCtlEnable(dlog,ok,!dim_ok);
  121.     OutlineDefault1(dlog,3);
  122.     
  123.     return CancelModalFilter(dlog,event,item);
  124. }
  125.  
  126. Boolean AskOtherServer(Boolean archie_popup,Handle servers,StringPtr server){
  127.     DialogPtr modal;
  128.     Boolean result=false;
  129.     short item;
  130.     Str255 tmpstr,tmpstr2;
  131.     Ptr saved_state;
  132.     
  133.     modal=GetNewDialog(400,(Ptr)0,(WindowPtr)-1);
  134.     
  135.     if (modal!=(DialogPtr)0){
  136.         GetAString(tmpstr,128,3+archie_popup);
  137.         ParamText(tmpstr,"\p","\p","\p");
  138.         SelectDialogItemText(modal,4,0,32767);
  139.         SetUpDefaultOutline(modal,ok,3);
  140.         
  141.         if (archie_popup){
  142.             HideDialogItem(modal,6);
  143.             HideDialogItem(modal,10);
  144.         }
  145.         
  146.         ShowWindow(modal);
  147.         DisableMenuBar(&saved_state,-1);
  148.         
  149.         InitCursor();
  150.         
  151.         ask_filter_globals=servers;
  152.         
  153.         do {
  154.             MovableModalDialog(gAskServerFilter,&item);
  155.         } while ((item!=ok)&&(item!=cancel));
  156.         
  157.         result=(item==ok);
  158.         
  159.         if (result){
  160.             GetItemText(modal,4,server);
  161.             GetItemText(modal,5,tmpstr);
  162.             GetItemText(modal,6,tmpstr2);
  163.             
  164.             Concat(server,4,"\p:",tmpstr,"\p:",tmpstr2);
  165.         }
  166.         
  167.         ReEnableMenuBar(&saved_state);
  168.         DisposeDialog(modal);
  169.     }
  170.     
  171.     return result;
  172. }
  173.  
  174. #define pf_archie 0
  175. #define pf_archie_mask 0x0001
  176.  
  177. OSErr WhatClickPopup(WindowType wt,short item,EventRecord* er){
  178.     WindowPtr dlg;
  179.     short value;
  180.     ControlHandle control;
  181.     MenuHandle menuh;
  182.     Handle servers;
  183.     Str255 server,str;
  184.     short menu_count,servers_count;
  185.     Boolean longmenu,archie_popup;
  186.     
  187.     dlg=WindowInfo[wt].window;
  188.     control=GetDControlHandle(dlg,item);
  189.     menuh=GetPopupMHandle(dlg,item);
  190.     servers=(Handle)(*control)->contrlRfCon;
  191.     
  192.     menu_count=CountMItems(menuh);
  193.     servers_count=CountStrsH(servers);
  194.     
  195.     longmenu=(menu_count)==(servers_count+3);
  196.     
  197.     value=GetDCtlValue(dlg,item);
  198.     if (value==menu_count){
  199.         archie_popup=WindowInfo[wt].items[item]->flags&pf_archie_mask;
  200.         if (AskOtherServer(archie_popup,servers,server)){
  201.             SetIndStrH(servers,1,server);
  202.         }
  203.         
  204.         AdjustPopupMenu(dlg,item);
  205.     } else {
  206.         value=value-2*longmenu;
  207.         if (value>0){
  208.             GetIndStrH(servers,value+1,server);
  209.             SetIndStrH(servers,1,server);
  210.             AdjustPopupMenu(dlg,item);
  211.         }
  212.     }
  213.     
  214.     return noErr;
  215. }
  216.  
  217. OSErr WhatOpenPopup(WindowType wt,short item){
  218.     WindowPtr dlg;
  219.     Str255 server;
  220.     Handle servers;
  221.     Str255 keybase;
  222.     long attr;
  223.     OSErr err=noErr;
  224.     ControlHandle control;
  225.     
  226.     SetPString(keybase,2,WindowInfo[wt].items[item]->key,"\pAll");
  227.     servers=(Handle)0;
  228.     
  229.     if (ICGetPrefHandle(GetInstance(),keybase,&attr,&servers)!=noErr){
  230.         servers=NewStrH();
  231.         if (servers==(Handle)0)
  232.             err=memFullErr;
  233.     }
  234.     
  235.     SetPString(keybase,2,WindowInfo[wt].items[item]->key,"\pPreferred");
  236.     
  237.     if (ICGetPrefStr(GetInstance(),keybase,&attr,server)!=noErr){
  238.         GetIndStrH(servers,1,server);
  239.     }
  240.     
  241.     ProcessAttributes(wt,item,attr);
  242.     
  243.     dlg=WindowInfo[wt].window;
  244.     control=GetDControlHandle(dlg,item);
  245.     (*control)->contrlRfCon=(long)servers;
  246.     
  247.     InsIndStrH(servers,1,server);
  248.     
  249.     AdjustPopupMenu(dlg,item);
  250.     SetDCtlEnable(dlg,item,!IsLocked(wt,item));
  251.     
  252.     return err;
  253. }
  254.  
  255. OSErr WhatFlushPopup(WindowType wt,short item){
  256.     WindowPtr dlg;
  257.     Str255 server,old_server,keybase;
  258.     OSErr err=noErr;
  259.     long attr;
  260.     Str31 preferStr="\pPreferred";
  261.     ControlHandle control;
  262.     
  263.     dlg=WindowInfo[wt].window;
  264.     control=GetDControlHandle(dlg,item);
  265.     GetIndStrH((Handle)(*control)->contrlRfCon,1,server);
  266.     
  267.     SetPString(keybase,2,WindowInfo[wt].items[item]->key,"\pPreferred");
  268.     
  269.     if (ICMapErr(ICGetPrefStr(GetInstance(),keybase,&attr,old_server))!=noErr){
  270.         old_server[0]=2;
  271.         old_server[1]=old_server[2]=':';
  272.     }
  273.     if (IUEqualString(old_server,server)!=0){
  274.         err=ICMapErr(ICSetPrefStr(GetInstance(),keybase,ICattr_no_change,server));
  275.         if (err==noErr)
  276.             DirtyDocument();
  277.     }
  278.     
  279.     return err;
  280. }
  281.  
  282. OSErr WhatClosePopup(WindowType wt,short item){
  283.     ControlHandle cont;
  284.     
  285.     cont=GetDControlHandle(WindowInfo[wt].window,item);
  286.     DisposeHandle((Handle)(*cont)->contrlRfCon);
  287.     
  288.     return noErr;
  289. }
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.